草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 为什么先调用基类构造函数再调用派生类构造函数

按照c++规则,在定义派生类对象时,先调用基类构造函数初始化基类成员,再初始化派生类构造函数。对于析构函数,规则恢复。我想知道为什么要遵守这条规则。为什么要先基类构造函数,再派生类构造函数?这样做有什么理由吗?或者仅仅因为它是c++的定义。谢谢, 最佳答案 因为派生类的成员可能依赖于基类的成员,所以必须先初始化基类的成员。你不能反驳。 关于c++-为什么先调用基类构造函数再调用派生类构造函数,我们在StackOverflow上找到一个类似的问题: https:

c++ - 非多态派生类的基类

我有以下类定义:classBaseHandle{/*Lotsofthings*/};classVertexHandle:publicBaseHandle{/*Onlystaticmembersandnon-virtualfunctions,defaultdtor*/};classEdgeHandle:publicBaseHandle{/*Dito*/};classFaceHandle:publicBaseHandle{/*Dito*/};所有类都没有虚函数或基类。派生类仅派生自BaseHandle,不添加任何非静态成员,也不添加非默认dtor。我想将Vertex-、Edge-和Face

c++ - 使用基类指针访问派生类成员

我正在用C++制作一个简单的控制台游戏我想知道我是否可以在使用指向基类(“实体”)的指针时访问“entPlayer”类的成员:classEntity{public:voidsetId(intid){Id=id;}intgetId(){returnId;}protected:intId;};classentPlayer:publicEntity{stringName;public:voidsetName(stringname){Name=name;}stringgetName(){returnName;}};Entity*createEntity(stringType){Entity*E

c++ - 从派生构造函数调用基类方法

classBase{public:Base(){}voidFoo(intx){...}};classDerived:publicBase{public:Derived(intargs){/*processargsinsomeway*/Foo(result);}};是否允许在派生类的构造函数中调用基类的方法?我想这很好,因为应该完全构造Base对象,但我想检查一下以防万一。 最佳答案 Isitallowedtocallamethodofthebaseclassintheconstructorofthederivedclass?是的。请

c++ - 复制抽象基类的对象

如果我有一个指向派生自抽象基类的对象的指针(因此我无法创建该类的新对象),并且我希望对所述对象进行深度复制,是否有更简洁的方法完成那个而不是让抽象基类创建一个新的纯虚拟copy函数,每个继承类都必须实现? 最佳答案 不,但是copy方法并不一定很痛苦:classDerived:publicBase{public:Base*copy()const{returnnewDerived(*this);}};(假设您已经有一个复制构造函数,如果您需要深复制,您将拥有)。 关于c++-复制抽象基类的

C++ - 实例化派生类并使用基类的构造函数

我有一个基类,它的构造函数需要一个参数(字符串)。然后我有一个派生类,它也有自己的构造函数。我想实例化派生类并能够设置基类的构造函数的参数。classBaseClass{public:BaseClass(stringa);};classDerivedClass:publicBaseClass{public:DerivedClass(stringb);};intmain(){DerivedClassabc("Hello");}调用派生类时不知道如何设置基类构造函数的参数。 最佳答案 您有两种可能性-内联:classDerivedCla

c++ - 我可以在基类中重载纯虚方法吗?

在下面的示例中,我有一个带有纯虚方法(又名FUN1)和一个普通方法(又名FUN2)的抽象类。#includeclassA{public:virtualvoidfun(inti)=0;//FUN1voidfun(){this->fun(123);}//FUN2};classB:publicA{public:virtualvoidfun(inti){std::cerr为什么我不能在派生类上调用FUN2?g++报错:main.cpp:19:8:error:nomatchingfunctionforcallto‘B::fun()’编辑:注意Overloadofpurevirtualfuncti

c++ - 空基类是否会影响派生类的布局?

C++标准(引用自n3242草案)关于子对象[intro.object]的说明如下:Unlessanobjectisabit-fieldorabaseclasssubobjectofzerosize,theaddressofthatobjectistheaddressofthefirstbyteitoccupies.Twodistinctobjectsthatareneitherbit-fieldsnorbaseclasssubobjectsofzerosizeshallhavedistinctaddresses.现在,给定以下片段:structempty{};structmember

c++ - 关于从基类到子类指针的向下转型

静态检查工具显示了以下代码的违规行为:classCSplitFrame:publicCFrameWnd...classCVsApp:publicCWinAppCWnd*CVsApp::GetSheetView(LPCSTRWindowText){CWnd*pWnd=reinterpret_cast(m_pMainWnd)->m_OutputBar.GetChildWnd(WindowText);returnpWnd;}错误信息:“CSplitFrame”类继承自“CWnd”类描述:避免向下转换继承层次。此规则检测从基类指针到子类指针的转换。好处:允许向下转换继承层次结构会导致维护问题,

c++ - 是否可以检查是否为类定义了成员函数,即使成员是从未知基类继承的

我发现类似的问题和答案,如thisone.但是,正如我所尝试的那样,只有在被测试的成员直接定义在被测试的类中时,这个SFINAE测试才会成功。例如下面的类B,D1打印HAS而其他两个打印NOTHAS。有没有办法判断一个类是否有成员,是自己定义的,还是基类定义的,这种情况下不知道基类的名字。动机是我想编写一个通用函数,如果它存在,它将调用某个方法(无论是否来自基类,参数的类型都是通用的,保留其可能基类的类型)。#includeclassHasFoo{public:typedefcharSmall;typedefstruct{char;char;}Large;templateclassSF